import json
import logging
from functools import wraps
from django_redis import get_redis_connection
from rest_framework.response import Response

# 初始化日志器
logger = logging.getLogger('django')


def house_search_decotator(func):
    """搜索缓存装饰器"""

    @wraps(func)
    def inner(*args, **kwargs):
        redis_cli = get_redis_connection('image_code')
        url_str = args[1].get_full_path()
        result_str = redis_cli.get(url_str)
        if not result_str:
            # 没有缓存数据，去数据库中查询数据，返回前将结果存到缓存中
            logger.info('未从缓存中找到数据，将从数据库中查找数据！')
            response = func(*args, **kwargs)
            args[1].get_full_path()
            result_str = json.dumps(response.data)
            # 数据缓存300秒
            redis_cli.setex(url_str, 300, result_str)
            return response
        else:
            # 有缓存数据，直接使用缓存的数据返回
            logger.info('缓存中有数据，直接使用缓存中的数据！')
            result = json.loads(result_str)
            return Response(result)

    return inner
